package com.yiqi.zhiyuan.feature.order.contract;

import com.suozhang.framework.framework.BasePresenter;
import com.suozhang.framework.framework.BaseView;
import com.yiqi.zhiyuan.entity.dto.ComfirmTripDTO;
import com.yiqi.zhiyuan.entity.dto.TaskDTO;
import com.yiqi.zhiyuan.entity.vo.EndPushVO;
import com.yiqi.zhiyuan.entity.vo.OrderVO;

import io.reactivex.Observable;

/**
 * @ProjectName: ZhiYuan
 * @Description: 订单详情契约类
 * @Author: lijuwen
 * @CreateDate: 2019/3/14 10:45
 * @UpdateUser: 更新者
 * @UpdateDate: 2019/3/14 10:45
 * @UpdateRemark: 更新说明
 * @Version: 1.0
 */
public interface OrderInfoContract {

    interface Model {

        /**
         * 结束任务
         *
         * @param
         * @return
         */
        Observable<EndPushVO> doEndTask(TaskDTO taskDTO);

        /**
         * 开始任务
         *
         * @param
         * @return
         */
        Observable<String> doStartTask(TaskDTO taskDTO);

        /**
         * 订单详情
         */
        Observable<OrderVO> doSelectDriverOrderDetails(TaskDTO taskDTO);

        /**
         * 到达乘客上车位置
         */
        Observable<String> doArriveAtLocation(TaskDTO taskDTO);

        /**
         * 乘客已上车
         */
        Observable<String> doPassengersGettingOnBus(TaskDTO taskDTO);

        /**
         * 立即前往
         */
        Observable<OrderVO> doGoNow(TaskDTO taskDTO);

        /**
         * 行程确认
         */
        Observable<String> doComfirmTrip(ComfirmTripDTO comfirmTripDTO);
    }

    interface View extends BaseView {


        /**
         * 结束任务
         */
        void showEndTaskSuccess(EndPushVO data);


        /**
         * 结束任务失败
         */
        void showEndTaskError(String errorMsg);

        /**
         * 开始任务成功
         */
        void showStartTaskSuccess();

        /**
         * 开始任务失败
         */
        void showStartTaskError(String errorMsg);

        /**
         * 订单详情成功
         */
        void showOrderDetailSuccess(OrderVO data);

        /**
         * 订单详情失败
         */
        void showOrderDetailError(String errorMsg);

        /**
         * 到达乘客上车位置成功
         */
        void showArriveAtLocationSuccess();

        /**
         * 乘客已上车成功
         */
        void showPassengersGettingOnBusSuccess();

        /**
         * 立即前往成功
         */
        void showGoNowSuccess();

        /**
         * 行程确认成功
         */
        void showComfirmTripSuccess();

    }

    interface Presenter extends BasePresenter {

        /**
         * 结束任务
         * param
         */
        void endTask(String orderNo, int useCarType);

        /**
         * 开始任务
         * param
         */
        void startTask(String orderNo, int useCarType);

        /**
         * 订单详情
         * param
         */
        void selectDriverOrderDetails(String orderNo, int useCarType);

        /**
         * 到达乘客上车位置成功
         * param
         */
        void arriveAtLocation(String orderNo, int useCarType);

        /**
         * 乘客已上车成功
         * param
         */
        void passengersGettingOnBus(String orderNo, int useCarType);

        /**
         * 立即前往
         * param
         */
        void goNow(String orderNo, int useCarType);


        /**
         * 行程确认
         */
        void doComfirmTrip(String orderNo,
                           String others,
                           String parking,
                                         String remark,
                           String roadBridge,
                                         int useCarType);
    }
}


